package com.ruoyi.quality.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.ruoyi.baseData.domain.dto.MaterialDto;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.quality.domain.*;
import com.ruoyi.quality.domain.dto.InspectionTemplateMaterialDto;
import com.ruoyi.quality.domain.dto.MaterialTemplateDto;
import com.ruoyi.quality.mapper.InspectionTemplateItemMapper;
import com.ruoyi.quality.mapper.InspectionTemplateItemMaterialMapper;
import com.ruoyi.quality.mapper.InspectionTemplateMapper;
import com.ruoyi.quality.service.InspectionTemplateMaterialService;
import com.ruoyi.quality.mapper.InspectionTemplateMaterialMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 *
 */
@Service
public class InspectionTemplateMaterialServiceImpl implements InspectionTemplateMaterialService{

    @Resource
    InspectionTemplateMaterialMapper inspectionTemplateMaterialMapper;


    @Resource
    InspectionTemplateMapper inspectionTemplateMapper;

    @Resource
    InspectionTemplateItemMapper inspectionTemplateItemMapper;

    @Resource
    InspectionTemplateItemMaterialMapper inspectionTemplateItemMaterialMapper;

    @Override
    public void addInspectionTemplateMaterial(MaterialTemplateDto materialTemplateDto) {
        String userName = SecurityUtils.getUsername();

        List<String> materialCodes = materialTemplateDto.getMaterialDtos().stream().map(item -> item.getCode()).distinct().collect(Collectors.toList());

        MPJLambdaWrapper<InspectionTemplateMaterial> wrapper = new MPJLambdaWrapper<InspectionTemplateMaterial>()
                .selectAll(InspectionTemplateMaterial.class)//查询user表全部字段
                //记的测试阶段
                .in(InspectionTemplateMaterial::getMaterialCode, materialCodes)
                .eq(InspectionTemplateMaterial::getDelFlag, 0);
        List<InspectionTemplateMaterial> inspectionTemplateMaterials = inspectionTemplateMaterialMapper.selectList(wrapper);
        List<InspectionTemplateItemMaterial> inspectionTemplateItemMaterialsCheck = inspectionTemplateItemMaterialMapper.selectList(new MPJLambdaWrapper<InspectionTemplateItemMaterial>()
                .in(InspectionTemplateItemMaterial::getMaterialCode,materialCodes)
                .eq(InspectionTemplateItemMaterial::getDelFlag, 0)
        );

        InspectionTemplate inspectionTemplate = inspectionTemplateMapper.selectById(materialTemplateDto.getInspectionTemplateMaterialDto().getInspectionTemplateId());
        List<InspectionTemplateItem> inspectionTemplateItems = inspectionTemplateItemMapper.selectList(new MPJLambdaWrapper<InspectionTemplateItem>()
                .eq(InspectionTemplateItem::getInspectionTemplateId,materialTemplateDto.getInspectionTemplateMaterialDto().getInspectionTemplateId())
                .eq(InspectionTemplateItem::getDelFlag, 0)
        );


        /**
         * 删除数据
         */
        for(InspectionTemplateMaterial inspectionTemplateMaterial : inspectionTemplateMaterials) {
            inspectionTemplateMaterial.setDelFlag(true);
            inspectionTemplateMaterial.setUpdateBy(userName);
            inspectionTemplateMaterial.setUpdateTime(new Date());
            inspectionTemplateMaterialMapper.updateById(inspectionTemplateMaterial);
        }

        for(InspectionTemplateItemMaterial inspectionTemplateItemMaterial : inspectionTemplateItemMaterialsCheck) {
            inspectionTemplateItemMaterial.setDelFlag(true);
            inspectionTemplateItemMaterial.setUpdateBy(userName);
            inspectionTemplateItemMaterial.setUpdateTime(new Date());
            inspectionTemplateItemMaterialMapper.updateById(inspectionTemplateItemMaterial);
        }
        List<InspectionTemplateItemMaterial> inspectionTemplateItemMaterials = new ArrayList<>();
        for(MaterialDto materialDto: materialTemplateDto.getMaterialDtos() ) {
            InspectionTemplateMaterial test2 = new InspectionTemplateMaterial();
            BeanUtils.copyProperties(materialTemplateDto.getInspectionTemplateMaterialDto(), test2, new String[]{"id"});
            test2.setMaterialCode(materialDto.getCode());
            test2.setInspectionTemplateName(inspectionTemplate.getName());
            test2.setInspectionTemplateId(inspectionTemplate.getId());
            test2.setDelFlag(false);
            test2.setCreateBy(userName);
            test2.setCreateTime(new Date());
            inspectionTemplateMaterialMapper.insert(test2);

            for(InspectionTemplateItem inspectionTemplateItem :inspectionTemplateItems) {
                InspectionTemplateItemMaterial inspectionTemplateItemMaterial = new InspectionTemplateItemMaterial();
                inspectionTemplateItemMaterial.setMaterialCode(materialDto.getCode());
                inspectionTemplateItemMaterial.setInspectionTemplateItemId(inspectionTemplateItem.getId());
                inspectionTemplateItemMaterial.setInspectionItemId(inspectionTemplateItem.getInspectionItemId());
                inspectionTemplateItemMaterial.setInspectionTemplateName(inspectionTemplate.getName());
                inspectionTemplateItemMaterial.setInspectionTemplateId(inspectionTemplate.getId());
                inspectionTemplateItemMaterial.setDelFlag(false);
                inspectionTemplateItemMaterial.setCreateBy(userName);
                inspectionTemplateItemMaterial.setCreateTime(new Date());
                inspectionTemplateItemMaterialMapper.insert(inspectionTemplateItemMaterial);
            }
        }
    }
}




